package net.office.service.impl;

import net.office.bean.ExpenseItem;
import net.office.bean.ExpenseItemExample;
import net.office.mapper.ExpenseItemMapper;
import net.office.service.ExpenseItemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class ExpenseItemServiceImpl implements ExpenseItemService {

    @Autowired
    private ExpenseItemMapper expenseItemMapper;

    @Override
    public int updateList(List<ExpenseItem> expenseItemList) {

        int res = 0;

        int expenseId = expenseItemList.get(0).getExpenseId();
        List<ExpenseItem> old_expenseItemList = findByExpenseId(expenseId);
        List<Integer> old_expenseItemIdList = new ArrayList<Integer>();
        for(int j=0; j<old_expenseItemList.size(); j++){
            old_expenseItemIdList.add(old_expenseItemList.get(j).getExpenseItemId());
        }

        for(int i=0; i<expenseItemList.size(); i++){
            if(expenseItemList.get(i).getExpenseItemId() != null && expenseItemList.get(i).getExpenseItemId() != 0){//update
                if(old_expenseItemIdList.contains(expenseItemList.get(i).getExpenseItemId())){
                    res = res + expenseItemMapper.updateByPrimaryKey(expenseItemList.get(i));
                    int index = old_expenseItemIdList.indexOf(expenseItemList.get(i).getExpenseItemId());
                    old_expenseItemIdList.remove(index);
                }
            }else{//insert
                res = res + expenseItemMapper.insertSelective(expenseItemList.get(i));
            }
        }

        if(old_expenseItemIdList.size() != 0){//delete
            for(int x=0; x<old_expenseItemIdList.size(); x++){
                res = res + expenseItemMapper.deleteByPrimaryKey(old_expenseItemIdList.get(x));
            }
        }

        return res;
    }

    @Override
    public List<ExpenseItem> findByExpenseId(Integer expenseId) {
        ExpenseItemExample example = new ExpenseItemExample();
        example.createCriteria().andExpenseIdEqualTo(expenseId);

        return expenseItemMapper.selectByExample(example);
    }

    @Override
    public int deleteByExpenseId(Integer expenseId) {
        ExpenseItemExample example = new ExpenseItemExample();
        example.createCriteria().andExpenseIdEqualTo(expenseId);

        return expenseItemMapper.deleteByExample(example);
    }
}
